package com.design.pattern.responsibility;

/**
 * 使用到的设计模式
 * <p>
 * 模板方法
 * 桥接模式
 * 责任链模式
 * 适配器
 *
 * @author 王霄
 * @date 2022/3/4 22:30
 */
public abstract class DefaultBank implements Bank {

    protected Bank next;

    public DefaultBank() {
    }

    public DefaultBank(Bank next) {
        this.next = next;
    }

    protected abstract boolean valid(int money);

    protected abstract void handler(int money);

    protected void fail(int money) {
        System.out.println("借的太多了，没钱了，金额：" + money);
    }

    @Override
    public void borrow(int money) {
        //校验借款金额是否满足
        if (valid(money)) {
            //满足直接放款
            handler(money);
        } else {
            //不满足，让下个银行继续处理
            if (next != null) {
                next.borrow(money);
            } else {
                //如果没有下个银行直接返回失败
                fail(money);
            }
        }
    }
}
